#include <iostream>

using namespace std;
//继承的语法：class 子类：继承方式 父类
//继承的方式：
//1、公共继承
//2、保护继承
//3、私有继承

class Base {
public:
    int a;
protected:
    int b;
private:
    int c;
};

class Son1 : public Base {//公共继承
public:
    void func() {
        a = 10;//父类中的公共权限成员 继承到子类中依然是公共权限
        b = 10;//父类中的保护权限成员 继承到子类中依然是保护权限
        //c=10;//父类中的私有权限成员 继承到子类中不可访问
    }
};

class Son2 : protected Base {//保护继承
public:
    void func() {
        a = 10;//父类中的公共权限成员 继承到子类中变成了保护权限
        b = 10;//父类中的保护权限成员 继承到子类中依然是保护权限
        //c=10;//父类中的私有权限成员 继承到子类中不可访问
    }
};

class Son3 : private Base {//私有继承
public:
    void func() {
        a = 10;//父类中的公共权限成员 继承到子类中变成了私有权限
        b = 10;//父类中的保护权限成员 继承到子类中变成了私有权限
        //c=10;//父类中的私有权限成员 继承到子类中不可访问
    }
};
class GrandSon:public Son3{
public:
    void fun(){
        //a=100;//Son3是私有继承，所以继承Son3的属性在GrandSon3中都无法访问到
        //b=100;//Son3是私有继承，所以继承Son3的属性在GrandSon3中都无法访问到
    }
};
void test1() {
    Son1 son1;
    son1.a = 100;
    //son1.b=100;//继承到Son1中b是保护权限 类外访问不到
    //son1.c=100;
    Son2 son2;
    //son2.a = 100;//继承到Son2中a是保护权限 类外访问不到
    //son2.b = 100;//继承到Son2中b是保护权限 类外访问不到
    Son3 son3;
    //son3.a=100;//继承到Son3中a是私有权限 类外访问不到
    //son3.b=100;//继承到Son3中b是私有权限 类外访问不到
}

int main() {
    test1();
    return 0;
}